home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / comm / misc / atomic1_5.lha / atomic.debug.rexx next >
OS/2 REXX Batch file  |  1999-01-29  |  9KB  |  473 lines

  1. /*     * * * * *    A T O M I C . R E X X     * * * * *           */
  2. /*                                                                */
  3. /*      file: s:atomic.rexx                                       */
  4. /*                                                                */
  5. /*      by John Chufar                                            */
  6. /*      ver 1.5  23 Dec 1998                                      */
  7. /*      *Minor enhancements:                                      */
  8. /*      -Fixes Time Difference Calculation bug                    */
  9. /*      -Fixes Time Zone hour offset report ( +/- offset)         */
  10. /*                                                                */
  11. /* ************************************************************** */
  12.  
  13.  
  14.  
  15. startup:
  16.  
  17. /* init the command channel to AmigaDOS and see if TCP is mounted */
  18.  
  19. ADDRESS COMMAND
  20.  
  21. " Assign >NIL: TCP: exists "
  22.  
  23. IF RC = 5 THEN
  24.    DO
  25.       SAY ' TCP: not mounted ... exiting  '
  26.       EXIT 10
  27.    END
  28.  
  29. startupend:
  30.  
  31.  
  32.  
  33. debug:
  34.  
  35. /* Use TRACE only for debug--it is very time consuming! */
  36. /* TRACE(I)  */
  37.  
  38. debugend:
  39.  
  40.  
  41.  
  42. titlescreen:
  43.  
  44. /* display the title screen ...   */
  45.  
  46. SAY ''
  47. SAY '                 * * *   A T O M I C L O C K  * * * '
  48. SAY '                             Version 1.5            '
  49. SAY ''
  50. SAY ''
  51.  
  52. /* dst$ set module */
  53.  
  54. numargs = ARG()  /* number of args */
  55.  
  56. IF numargs < 1 THEN
  57.    DO
  58.       SAY ''
  59.       SAY 'Daylight savings time? (Y or N) Then <ENTER> '
  60.       PULL dst$
  61.    END
  62.   ELSE
  63.    DO
  64.       ARG dst$
  65.    END
  66.  
  67.  
  68. SAY 'Connecting to Atomic Clock server time-A.timefreq.bldrdoc.gov...'
  69.  
  70. titlescreenend:
  71.  
  72.  
  73.  
  74. connect:
  75.  
  76. /* open the tcp channel to the host */
  77.  
  78. IF ~OPEN(dt,'TCP:time-A.timefreq.bldrdoc.gov/daytime', 'R') THEN
  79.       DO
  80.         SAY 'Connection error with TIMESERVER - A'
  81.         SAY 'Retrying  now  with   TIMESERVER - B'
  82.         SAY ''
  83.         SAY 'Attempting connection to time-B.timefreq.bldrdoc.gov'
  84.         IF ~OPEN(dt,'TCP:time-B.timefreq.bldrdoc.gov/daytime', 'R') THEN
  85.           DO
  86.             SAY '*** NIST Time Services are not present...exiting'
  87.             SAY ''
  88.             SAY 'Try again at a later time.'
  89.             SAY '**************************************'
  90.             EXIT 10
  91.           END
  92.       END
  93.  
  94. connectend:
  95.  
  96.  
  97.  
  98. decode:
  99. /* get the atomic time from the open file 'dt'  */
  100.   
  101. d = readln(dt) /* dummy read...empty first line */
  102. d = readln(dt)
  103.  
  104.  
  105. tim = SubWord(d, 3, 1)
  106.  
  107. utcdate=SubWord(d,2,1)
  108.  
  109. utcday=SubStr(utcdate,7,2)
  110. utcmonth=SubStr(utcdate,4,2)
  111. utcyear=SubStr(utcdate,1,2)
  112.  
  113. decodend:
  114.  
  115.  
  116.  
  117. oldtime = TIME('N')
  118.  
  119. /* changed in 1.5 from DATE('B') */
  120.  
  121. olddate = DATE('I')
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128. /* D E B U G  */
  129. say 'olddate: ' olddate
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138. Date TIME tim DATE utcday'-'utcmonth'-'utcyear
  139.  
  140.  
  141. /*      Script to offset the time to local                        */
  142. /*      and calculates your localtime 'error'                     */
  143.  
  144.  
  145. /* This section checks to see if locale.prefs exists */
  146.  
  147. IF ~(Exists('env:sys/locale.prefs'))
  148.    THEN DO
  149.      Say 'Fatal error *** Env:sys/locale.prefs does not exist ***'
  150.      Exit 10
  151.    END
  152.  
  153. /* put the info into a text file to read */
  154. 'type env:sys/locale.prefs hex >ram:locale.txt'
  155.  
  156. /* Read in the hex values for timezone from the locale.txt file */
  157. IF ~Open(st,'ram:locale.txt', 'R')
  158.    THEN DO
  159.       Say '*** Unable to create temp file'
  160.       Exit 10
  161.    END
  162.  
  163.  
  164. /* move to the point in the file where the timezone info is */
  165.  
  166. dummy = SEEK(st,1614,'B')
  167. b = READCH(st,4)
  168.  
  169. /* get all hex characters up to the point */
  170. /* of the where the two values are that hold the timezone */
  171.  
  172. /* convert the characters to their decimal equivalent  */
  173. tzoval = X2D(b)
  174.  
  175.  
  176.  
  177.  
  178.  
  179. /* D E B U G  */
  180. say 'tzoval: ' tzoval
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187. gmtflag = 0
  188.  
  189. IF tzoval > 660      /* if the timeszone is > international date line */
  190.    THEN DO
  191.    tzoval = 65536 - tzoval       /* reverse offset (12 hours or greater */
  192.    tzocalc = tzoval/60           /* convert to hours.decimins */
  193.    tzocalc = TRUNC(tzocalc,2)    /* hours.mm format */
  194.    tzohour = TRUNC(tzocalc)      /* hours */
  195.    tzomin  = RIGHT(tzocalc,2)    /* extract minutes */
  196.    tzomin  = tzomin * .6         /* convert decimal to minutes */
  197.    tzomin  = TRUNC(tzomin)       /* discard decimals (seconds) */
  198.    tzohour = 24 - tzohour        /* complete the offset */
  199.    if tzomin > 0 THEN tzohour = tzohour -1
  200.    gmtflag = 1
  201.    END
  202.  
  203.  
  204. IF gmtflag = 0      /* if the timezone is < 12 hours fom GMT */
  205.    THEN DO
  206.    tzocalc = tzoval/60           /* convert to hours.decimins */
  207.    tzocalc = TRUNC(tzocalc,2)    /* hours.mm format */
  208.    tzohour = TRUNC(tzocalc)      /* hours */
  209.    tzomin  = RIGHT(tzocalc,2)    /* extract minutes */
  210.    tzomin  = tzomin * .6         /* convert decimal to minutes */
  211.    tzomin  = TRUNC(tzomin)       /* discard decimals (seconds) */
  212.    END
  213.  
  214.  
  215.  
  216.  
  217.  
  218.  
  219. /* D E B U G  */
  220. say 'gmtflag: ' gmtflag
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228. IF dst$ = 'Y' THEN tzohour = tzohour - 1  /* read dst$ in ARGS */
  229.  
  230. tzoff$ = "-" || tzohour
  231.  
  232. IF tzohour > 12
  233.    THEN DO
  234.    tzoff = 24 - tzohour
  235.    IF tzomin > 0 THEN tzoff = tzoff -1  /* Compensate for half hour zones */
  236.    tzoff$ = "+" || tzoff
  237.    END
  238.  
  239. SAY 'Time adjusted '|| tzoff$ ||' hours and ' tzomin ' minutes from UTC.'
  240. SAY ''
  241.  
  242.  
  243.  
  244.  
  245.  
  246. /* D E B U G  */
  247. say 'tzoff$: ' tzoff$
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  
  255. /* read current system time and extract hours and minutes */
  256.  
  257. timestring = TIME('N')
  258. mins = SUBSTR(timestring,4,2)
  259. hour = LEFT(timestring,2)
  260.  
  261. newmins = mins - tzomin
  262. IF newmins < 0
  263.    THEN DO
  264.    newmins = newmins + 60        /* positive value for minutes */
  265.    tzohour = tzohour + 1         /* borrow an hour for substraction */
  266.    END
  267.  
  268.  
  269. offset = tzohour  /* set for Your Time Zone */
  270. localhour = hour - offset
  271.  
  272.  
  273.  
  274.  
  275.  
  276.  
  277. /* D E B U G  */
  278. say 'localhour: ' localhour
  279.  
  280.  
  281.  
  282.  
  283.  
  284.  
  285.  
  286. minusday = 0
  287. IF localhour <0
  288.  THEN  DO
  289.      localhour = localhour + 24
  290.      minusday = 1
  291.  END
  292.  
  293.  
  294.  
  295.  
  296.  
  297. /* D E B U G  */
  298. say 'localhour: ' localhour
  299.  
  300.  
  301.  
  302.  
  303. /* D E B U G  */
  304. say 'minusday: ' minusday
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  
  314. newhour = localhour
  315.  
  316.  
  317. /* correct for hours and minutes of one character '<10'  */
  318.  
  319. IF localhour <10 THEN newhour = "0" || localhour
  320. IF newmins < 10 THEN newmins = "0" || newmins
  321.  
  322.  
  323. /* create the new time string */
  324.  
  325. newtime = newhour || ":" || newmins ||SUBSTR(timestring,6,3)
  326.  
  327.  
  328. /* Correct for the date  */
  329. IF (minusday = 0) & (gmtflag = 1) THEN 'DATE TOMORROW'
  330. IF (minusday = 1) & (gmtflag = 0) THEN 'DATE YESTERDAY'
  331. /* ELSE leave the date as TODAY */
  332.  
  333.  
  334. /*  AmigaDOS DATE commands  */
  335.  
  336. 'DATE TIME ' || newtime
  337.  
  338. 'DATE'
  339.  
  340. 'SetClock SAVE'
  341. SAY ''
  342.  
  343.  
  344. /* changed in 1.5 from DATE('B')  */
  345. newdate = DATE('I')
  346.  
  347.  
  348.  
  349. /* Compensation for initial clock read                 */
  350. /* Adjust by adding 1 second due to program exec time  */
  351. /* Average exec time was .56 seconds on A3000 25MHz    */
  352.  
  353. adjustment:
  354.  
  355. adjsec = RIGHT(oldtime,2)
  356. adjmin = SUBSTR(oldtime,4,2)
  357. adjhour = LEFT(oldtime,2)
  358.  
  359. adjsec = adjsec + 1
  360.  
  361.    IF adjsec > 59 THEN
  362.       DO
  363.           adjsec = 0
  364.           adjmin = adjmin + 1
  365.             IF adjmin > 60 THEN
  366.                DO
  367.                   adjmin = 0
  368.                   adjhour = adjhour + 1
  369.                      IF adjhour > 23 THEN
  370.                         DO
  371.                            adjhour = 0
  372.                            olddate = olddate + 1
  373.                          END
  374.                END
  375.       END
  376.  
  377. /* ensures values are converted to integer types */
  378.  
  379. adjsec = adjsec + 0
  380. adjmin = adjmin + 0
  381. adjhour = adjhour + 0
  382.  
  383.  
  384.  
  385. adjsecstr$  = adjsec
  386. IF adjsecstr$ = '0' THEN adjsecstr$ = '00'
  387. IF (adjsec > 0 ) & (adjsec < 10) THEN adjsecstr$ = '0' || adjsecstr$
  388.  
  389. adjminstr$ = adjmin
  390. IF adjminstr$ = '0' THEN adjminstr$ = '00'
  391. IF (adjmin > 0 ) & (adjmin < 10) THEN adjminstr$ = '0' || adjminstr$
  392.  
  393. adjhourstr$ = adjhour
  394. IF adjhourstr$ = '0' THEN adjhourstr$ = '00'
  395. IF (adjhour > 0 ) & (adjhour < 10) THEN adjhourstr$ = '0' || adjhourstr$
  396.  
  397. oldtime = adjhourstr$||':'||adjminstr$||':'||adjsecstr$
  398.  
  399. adjustmentend:
  400.  
  401.  
  402.  
  403. oldtimesecs = timeseccalc(oldtime)
  404. newtimesecs = timeseccalc(newtime)
  405.  
  406.  
  407. SAY ' Previous System time was: ' oldtime
  408. SAY ' Current System time is  : ' newtime
  409.  
  410. oldsecs =  (olddate *  86400) + oldtimesecs
  411. newsecs =  (newdate * 86400)  + newtimesecs
  412.  
  413.  
  414. secdiff = newsecs - oldsecs
  415.  
  416. secdiff  =  ABS(secdiff)
  417.  
  418. datediff = TRUNC(secdiff / 86400)
  419.  
  420. compsecdiff = secdiff - (datediff * 86400)
  421.  
  422. diffstr$ = timediff(compsecdiff)
  423.  
  424. /* datediff = newdate - olddate */
  425. /* datediff = ABS(datediff)     */
  426.  
  427. SAY ''
  428. SAY ' Time difference was ' datediff ' days and 'diffstr$
  429. SAY ''
  430.  
  431. EXIT
  432.  
  433. /* ******************  TIME CALC  MODDULE   **************   */
  434.  
  435. /* Function to calc timesecs */
  436. timeseccalc: procedure
  437.  ARG timestring
  438.  
  439.  SECS = RIGHT(timestring,2)
  440.  MINS = SUBSTR(timestring,4,2)
  441.  HOURS = LEFT(timestring,2)
  442.  
  443. timesecs = (HOURS * 3600) + (MINS * 60) + (SECS)
  444.  
  445. RETURN timesecs
  446.  
  447.  
  448. /* Function to converts seconds into HH:MM:SS format */
  449. timediff: procedure
  450.  ARG timenumsecs
  451.  
  452.    hours = timenumsecs % 3600
  453.    hoursecs = hours * 3600
  454.    mins = (timenumsecs - (hoursecs)) % 60
  455.    minsecs = mins * 60
  456.    secs = timenumsecs - hoursecs - minsecs
  457.  
  458.    hourstr$ = hours
  459.    IF (hours < 10) THEN hourstr$ = '0' || hours
  460.    minstr$ = mins
  461.    IF (mins < 10)  THEN minstr$ = '0' || mins
  462.    secstr$ = secs
  463.    IF (secs < 10)  THEN secstr$ = '0' || secs
  464.  
  465.    timeconvstr$ = hourstr$||':'||minstr$||':'||secstr$
  466.  
  467.  
  468.  RETURN timeconvstr$
  469.  
  470.  
  471.  
  472. /* ****************   E N D   O F   P R O G R A M   ****************** */
  473.